Energy consumption of computing devices is an on-going area of concern in the computer industry. The ever-increasing processing capacity and hardware complexity of today's computers and portable electronic devices such as phones, media players, personal digital assistants, navigation devices, and the like, leads to higher power consumption. Power requirement is a primary concern for portable devices and computers because it is one of the two factors that determine battery life (the other being battery capacity). Power requirement is also important for desktop and server computers because it directly bears on operating costs of home and office computer systems as well as server farms, because of its effects on energy costs and heat management.
Current efforts to reduce the energy consumption of computing devices are focused in several areas. New battery technologies are being researched to enable higher capacities. Hardware components such as CPUs, peripherals, displays, and the like are being tuned for reduced energy consumption. Code optimizations are employed, in which code changes are made that enable execution of the same task using fewer CPU cycles and/or other resources. Optimizations of the timing of software executions at all levels of system and application software are also used, in order to enable hardware to spend longer periods in lower power states. Other strategies optimize, from a power perspective, interactions of software and hardware. These strategies provide ways to determine how software is interacting with hardware, firmware and other software components with respect to power, and thus provide a way to determine how to better optimize this interaction, such as by keeping unused peripherals turned off or at lower power states.
Strategies for optimizing software for lower energy consumption generally rely on intuitive principles or on a theoretical or specification-based understanding of how and where power is consumed on the system during execution of a given task. In one example, in some systems, if the CPU enters an idle mode for a period of time, the system may transition to a lower power state. In another example, continuous but slow input/output tasks from optical media are recognized to consume more power than reading the same data and caching it in memory. In yet another example, it has been recognized that high rates of direct memory access and/or or interrupt rates tend to lead to higher power consumption. It has further been recognized that selective screen updates for modified window content generally leads to less power consumption compared to updating the entire screen or window area.
In many cases, however, intuitive principles and specification-based policies for implementing power optimizations in software have trade-offs that impact both the resulting power savings and the engineering costs of implementation—and available theoretical information is often not sufficient to accurately determine how much power will actually be saved under various conditions if a certain strategy is implemented. Moreover, unforeseen activity from other parts of a computing system may largely offset the benefits of a particular power optimization.
System-wide energy measurements, which aggregate power contributions of a number of hardware and software components, have been used to gauge the effectiveness of implementing intuitive or specification-based strategies. Such system-wide measurements are, however, generally limited in the amount of useful information that can be ascertained about power consumption of individual computing components, and how the individual activities of such components contribute to energy consumption.